package com.example.dorm1_demo.controller;

import com.example.dorm1_demo.entity.User;
import com.example.dorm1_demo.service.UserService;
import jakarta.servlet.http.HttpSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;


//用户控制器类，处理与用户相关的请求。
@Controller
@RequestMapping("/user")
public class UserController {
    @Autowired
    private UserService userService;

    // 显示登录页面。
    @GetMapping("/login")
    public String loginPage() {
        return "login";
    }

     //处理用户登录逻辑。
    @PostMapping("/login")
    public String login(String account, String password, HttpSession session, RedirectAttributes redirectAttributes) {
        User user = userService.login(account, password);
        if (user != null) {
            session.setAttribute("user", user);
            return "redirect:/home";
        }
        redirectAttributes.addFlashAttribute("message", "用户名或密码错误");
        return "redirect:/user/login";
    }


     // 显示注册页面。
    @GetMapping("/register")
    public String registerPage() {
        return "register";
    }

    // 处理用户注册逻辑。
    @PostMapping("/register")
    public String register(User user, RedirectAttributes redirectAttributes) {
        if (userService.register(user)) {
            redirectAttributes.addFlashAttribute("message", "注册成功，请登录");
            return "redirect:/user/login";
        }
        redirectAttributes.addFlashAttribute("message", "注册失败，用户名/邮箱/手机号可能已存在或密码不符合要求");
        return "redirect:/user/register";
    }


     // 用户登出，使会话失效并重定向到登录页。

    @GetMapping("/logout")
    public String logout(HttpSession session) {
        session.invalidate();
        return "redirect:/user/login";
    }

     //显示修改密码页面。
    @GetMapping("/changePassword")
    public String changePasswordPage() {
        return "change-password";
    }

     // 处理修改密码的请求。
    @PostMapping("/changePassword")
    public String changePassword(String oldPassword, String newPassword, HttpSession session, RedirectAttributes redirectAttributes) {
        User user = (User) session.getAttribute("user");
        if (user != null && userService.changePassword(user.getUsername(), oldPassword, newPassword)) {
            redirectAttributes.addFlashAttribute("message", "密码修改成功，请重新登录");
            session.invalidate();
            return "redirect:/user/login";
        }
        redirectAttributes.addFlashAttribute("message", "密码修改失败，旧密码错误或新密码不符合要求");
        return "redirect:/user/changePassword";
    }
}